//package com.live.webvideo.common.base.shiro;
//
//import org.apache.shiro.mgt.SecurityManager;
//import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
//import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
//import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.util.LinkedHashMap;
//import java.util.Map;
//
//
//@Configuration
//public class ShiroConfig{
//
//    /*@Autowired
//    private SysPermService sysPermService;*/
//
//    /**
//     * ShiroFilterFactoryBean 处理拦截资源文件问题。
//     * 注意：单独一个ShiroFilterFactoryBean配置是或报错的，以为在
//     * 初始化ShiroFilterFactoryBean的时候需要注入：SecurityManager
//     *
//     * Filter Chain定义说明 1、一个URL可以配置多个Filter，使用逗号分隔 2、当设置多个过滤器时，全部验证通过，才视为通过
//     * 3、部分过滤器可指定参数，如perms，roles
//     *
//     */
//    @Bean
//    public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
//
//        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
//
//        // 必须设置 SecurityManager
//        shiroFilterFactoryBean.setSecurityManager(securityManager);
//
//        // 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
//        shiroFilterFactoryBean.setLoginUrl("/index");
//        // 登录成功后要跳转的链接
//        //shiroFilterFactoryBean.setSuccessUrl("/index");
//        // 未授权界面;
//        shiroFilterFactoryBean.setUnauthorizedUrl("/authority_no");
//
//        //自定义拦截器
//
//        //Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>();
//        //限制同一帐号同时在线的个数。
//
//        //filtersMap.put("kickout", kickoutSessionControlFilter());
//        //shiroFilterFactoryBean.setFilters(filtersMap);
//
//        // 拦截器.
//        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
//        // 配置不会被拦截的链接 顺序判断
//        //filterChainDefinitionMap.put("/static/**", "anon");
//        filterChainDefinitionMap.put("/static/css/**", "anon");
//        filterChainDefinitionMap.put("/static/fonts/**", "anon");
//        filterChainDefinitionMap.put("/static/img/**", "anon");
//        filterChainDefinitionMap.put("/static/js/**", "anon");
//        filterChainDefinitionMap.put("/static/skins/**", "anon");
//
//        filterChainDefinitionMap.put("/css/**", "anon");
//        filterChainDefinitionMap.put("/fonts/**", "anon");
//        filterChainDefinitionMap.put("/img/**", "anon");
//        filterChainDefinitionMap.put("/js/**", "anon");
//        filterChainDefinitionMap.put("/skins/**", "anon");
//        filterChainDefinitionMap.put("/index/**", "anon");
//        filterChainDefinitionMap.put("/login/**", "anon");
//
//        filterChainDefinitionMap.put("/getGifCode", "anon");
//        filterChainDefinitionMap.put("/doc.html", "anon");
//        filterChainDefinitionMap.put("/webjars/bycdao-ui/jsonview/jquery.jsonview.min.css", "anon");
//        //swagger
//        filterChainDefinitionMap.put("/webjars/**", "anon");
//        filterChainDefinitionMap.put("/swagger-resources/configuration/ui/**", "anon");
//        filterChainDefinitionMap.put("/swagger**", "anon");
//        filterChainDefinitionMap.put("/v2/api-docs/**", "anon");
//
//        // 配置退出过滤器,其中的具体的退出代码Shiro已经替我们实现了
//        filterChainDefinitionMap.put("/logout", "logout");
//        // 从数据库获取
//        /*List<SysPerm> list = sysPermService.selectAll();
//
//        for (SysPerm sysPermissionInit : list) {
//            filterChainDefinitionMap.put(sysPermissionInit.getInterfaceurl(),sysPermissionInit.getPermissioninit());
//        }*/
//        /*filterChainDefinitionMap.put("/add", "perms[权限添加:权限删除]");
//        filterChainDefinitionMap.put("/userAdd", "perms[uadd22],roles[王东]");
//        filterChainDefinitionMap.put("/403403", "perms[403403]");*/
//
//        // <!-- 过滤链定义，从上向下顺序执行，一般将 /**放在最为下边 -->:这是一个坑呢，一不小心代码就不好使了;
//        // <!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
//        filterChainDefinitionMap.put("/**", "authc");
//        //filterChainDefinitionMap.put("/**", "anon");
//
//
//        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
//        System.out.println("Shiro拦截器工厂类注入成功");
//
//        return shiroFilterFactoryBean;
//    }
//
//    @Bean
//    public SecurityManager securityManager() {
//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//        // 设置realm.
//        securityManager.setRealm(myShiroRealm());
//        return securityManager;
//    }
//
//    /**
//     * 身份认证realm; (这个需要自己写，账号密码校验；权限等)
//     *
//     * @return
//     */
//    @Bean
//    public MyShiroRealm myShiroRealm() {
//        MyShiroRealm myShiroRealm = new MyShiroRealm();
//        return myShiroRealm;
//    }
//
//    /**
//     *  开启shiro aop注解支持.
//     *  使用代理方式;所以需要开启代码支持;
//     * @param securityManager
//     * @return
//     */
//    @Bean
//    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
//        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
//        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
//        return authorizationAttributeSourceAdvisor;
//    }
//
//}
//
